/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cl.alanis.dao.impl;

import cl.alanis.dao.Dao;
import cl.alanis.dao.DocumentoDao;
import cl.alanis.dto.DetalleDocDto;
import cl.alanis.dto.DocumentoDto;
import cl.alanis.util.AlanisLog;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.log4j.Logger;

/**
 *
 * @author Pía
 */
public class DocumentoDaoImpl extends Dao implements DocumentoDao{
    Logger logger=AlanisLog.obtenerLogger(DocumentoDaoImpl.class);
    public DocumentoDaoImpl(){
        super();
    }
    
    @Override
    public boolean insertarDocumento(DocumentoDto documento) throws Exception{
        logger.debug("Insertando documento:"+documento);
        String insert="INSERT INTO DOC_INGRESO(COD_DOC,NUM_DOC,COD_TIPODOC,DESCRIPCION,FECHA,VALOR_NETO,VALOR_IVA,VALOR_TOTAL) VALUES(?,?,?,?,?,?,?,?)";
        boolean retorno=false;
        try {
            PreparedStatement pstmt = conexion.preparedStatement(insert);
            pstmt.setInt(1, documento.getDocIngreso());
            pstmt.setString(2, documento.getNumeroDocumento());
            pstmt.setInt(3, documento.getTipoDoc());
            pstmt.setString(4, documento.getDescripcion());
            pstmt.setDate(5, new Date(documento.getFecha()));
            pstmt.setInt(6, documento.getValorNeto());
            pstmt.setInt(7, documento.getValorIva());
            pstmt.setInt(8, documento.getValorTotal());
            pstmt.executeUpdate();
        } catch (SQLException ex) {
            logger.error("Error:"+ex.getMessage());
            throw new Exception("Error en el sistema");
        }
        return retorno;
    }
    
    public Integer obtieneCodigo() throws Exception {
        logger.debug("Obteniendo codigo de documento");
        String select="SELECT MAX(COD_DOC) AS MAX_COD FROM DOC_INGRESO";
        Integer codigo = null;
        try {
            PreparedStatement pstmt = conexion.preparedStatement(select);
            ResultSet rs = pstmt.executeQuery();
            if(rs.next())
                codigo=rs.getInt("MAX_COD");
            else{
                codigo=new Integer(0);
            }
        } catch (SQLException ex) {
            logger.error("Error:"+ex.getMessage());
            throw new Exception("Error en el sistema");
        }finally{
            conexion.close();
        }
        return codigo+1;
    }

    @Override
    public void insertarDetalleDocumento(DetalleDocDto detalleDoc) throws Exception {
        logger.debug("Insertando detalle documento:"+detalleDoc);
        String insert="INSERT INTO DETALLE_DOC(COD_PROD,CANTIDAD,VALOR_UNITARIO,VALOR_TOTAL,COD_DOC) VALUES(?,?,?,?,?)";
        PreparedStatement pstmt;
        try {
            pstmt=conexion.preparedStatement(insert);
            pstmt.setString(1, detalleDoc.getCodigoProducto());
            pstmt.setInt(2, detalleDoc.getCantidad());
            pstmt.setInt(3, detalleDoc.getValorUnitario());
            pstmt.setInt(4, detalleDoc.getValorTotal());
            pstmt.setInt(5, detalleDoc.getCodDocumento());
            pstmt.executeUpdate();
        } catch (SQLException ex) {
             logger.error("Error:"+ex.getMessage());
            throw new Exception("Error en el sistema");
        }
    }

    
    
}
